package com.eci.common.util;

import java.math.BigDecimal;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;

import com.eci.common.asset.constant.ObjectConstant.DatexFormatter;
import com.eci.common.asset.constant.ObjectConstant.DecimalxFormat;
import com.eci.common.asset.constant.StringConstant.Symbol;

 

/**
 * 
 * 	一个格式化数据的工具类
 * 
 */
public class FormatUtil {
	 

	/**
	 * 	将double类型的数字保留两位小数（四舍五入）
	 * 
	 * @param number
	 * @return
	 */
	public static String formatNumber(double number) {
		
		return DecimalxFormat.decFormat1.format(number);
	}

	/**
	 * 	将double类型的数字保留两位小数
	 * 
	 * @param number
	 * @return
	 */
	public static String formatNumberx(double number) {
		return DecimalxFormat.decFormat2.format(number);
	}
	
	
	/**
	 * 	将日期格式化成String类型
	 * 
	 * @param date  日期
	 * @param pattern  格式类型
	 * @return
	 */
	public static String formatDate(TemporalAccessor timpAccessor, String pattern) {

		return DateTimeFormatter.ofPattern(pattern).format(timpAccessor);
	}
	

	/**
	 * 	格式化日期 返回[yyyy-MM-dd] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateForStandard(LocalDate date) {
		return DatexFormatter.STANDARD_DATE.format(date);
	}

	/**
	 * 	格式化日期 返回[yyyy-MM-dd HH:mm:ss] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateTimeForStandard(LocalDateTime datetime) {
		return DatexFormatter.STANDARD_DATETIME.format(datetime);
	}

	/**
	 * 	格式化时间 返回[HH:mm:ss] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatTimeForStandard(LocalTime time) {
		return DatexFormatter.STANDARD_TIME.format(time);
	}

	/**
	 *	 格式化日期 返回[yyyy年MM月dd日] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateForChinese(LocalDate date) {
		return DatexFormatter.CHINESE_DATE.format(date);
	}

	/**
	 * 	格式化日期 返回[yyyy年MM月dd日 HH时mm分ss秒] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateTimeForChinese(LocalDateTime datetime) {
		return DatexFormatter.CHINESE_DATETIME.format(datetime);
	}

	/**
	 * 	格式化时间 返回[HH时间mm分ss秒] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatTimeForChinese(LocalTime time) {
		return DatexFormatter.CHINESE_TIME.format(time);
	}

	/**
	 * 	格式化日期 返回[yyyy/MM/dd] 形式字符串
	 * 
	 * @param date
	 */
	public static String formatDateForExcelDate(LocalDate date) {
		return DatexFormatter.EXCEL_DATE.format(date);
	}

	/**
	 * 	格式化日期 返回[yyyyMMdd] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateForNumber(LocalDate date) {
		return DatexFormatter.NUMBER_DATE.format(date);
	}

	/**
	 * 	格式化日期 返回[yyyyMMddHHmmss] 形式字符串
	 * 
	 * @param date
	 * @return
	 */
	public static String formatDateTimeForNumber(LocalDateTime datetime) {
		return DatexFormatter.NUMBER_DATETIME.format(datetime);
	}

	/**
	 * 	将 yyyy-MM-dd 类型的字符串转换成日期格式
	 */
	public static LocalDate parseDateForStandard(String str) {
		return LocalDate.parse(str, DatexFormatter.STANDARD_DATE);
	}

	/**
	 *	 将 yyyyMMdd 类型的字符串转换成日期格式
	 */
	public static LocalDate parseDateForNumber(String str) {

		return LocalDate.parse(str, DatexFormatter.NUMBER_DATE);
	}

	/**
	 * 	将 yyyy年MM月dd日 类型的字符串转换成日期格式
	 */
	public static LocalDate parseDateForChinese(String str) {

		return LocalDate.parse(str, DatexFormatter.CHINESE_DATE);

	}

	/**
	 * 	将 yyyy-MM-dd HH:mm:ss 类型的字符串转换成日期时间格式
	 */
	public static LocalDateTime parseDateTimeForStandard(String str) {

		return LocalDateTime.parse(str, DatexFormatter.STANDARD_DATETIME);

	}
	
	
	/**
	 * 	将 yyyyMMddHHmmss 类型的字符串转换成日期时间格式
	 */
	public static LocalDateTime parseDateTimeForNumber(String str) {

		return LocalDateTime.parse(str, DatexFormatter.NUMBER_DATETIME);

	}
	

	/**
	 *	 将 yyyy年MM月dd日 HH时mm分ss秒 类型的字符串转换成日期时间格式
	 */
	public static LocalDateTime parseDateTimeForChinese(String str) {

		return LocalDateTime.parse(str, DatexFormatter.CHINESE_DATETIME);
	}



	public static LocalDateTime toDateTime(int year, int month, int dayOfMonth, int hour, int minute, int second) {

		return LocalDateTime.of(year, month, dayOfMonth, hour, minute, second);

	}

	/**
	 * 	格式化经纬度 将dddmm.mmmm、ddmm.mmmm 类型的经纬度转换成地图能识别的经纬度
	 * 
	 * @param wd
	 * @return
	 */
	public static BigDecimal formatJWD(BigDecimal jwd) {

		BigDecimal zs = CalcUtil.div(jwd, new BigDecimal(100), 0);
		BigDecimal xs = CalcUtil.div(CalcUtil.sub(jwd, CalcUtil.mul(zs, new BigDecimal(100))), new BigDecimal(60),6);

		return CalcUtil.add(zs, xs);
	}
	
	/**
	 *	格式化数字时间字符串，将起转换成正常格式的字符串
	 * 
	 * @param numberDatetime 一个合法 yyyyMMddHHmmss类型的字符串
	 * @return String yyyy-MM-dd HH:mm:ss类型的字符串
	 */
	public static String formatNumberDatetime(String  numberDatetime) {
		
		return  numberDatetime.substring(0, 4)+Symbol.DASH+numberDatetime.substring(4, 6)+Symbol.DASH+numberDatetime.substring(6, 8)+ Symbol.SPACE
			+ numberDatetime.substring(8, 10) +Symbol.COLON +numberDatetime.substring(10, 12)+Symbol.COLON +numberDatetime.substring(12, 14);

	 
	}
}
